package pl.ps.wi.monitoring.station.enums;

//* @enum AlertEvents AlertEvents
 /**
* @class AlertEvents
 * @file AlertEvents.java
* @brief  publiczna klasa wyliczeniowa. Wykorzystywana do wysyłania smsów
*
* Posiada 5 typów wyliczeniowych, które odpowiadają zdarzeniom: wysokiej/niskiej temperatury, dostępu, zabronienia dostepu do systemu, uszkodzenia systemu.
* Metody dotyczące id są niewykorzystywane. Pola zawarte w tej klasie są ustawiane przez inne metody, a następnie sa odczytywane w celu zapisania odpowiedniej treści do smsa.
*
* Zmienne:
*- private int id;
*	- id zdarzenia. 
*	- @see AlertEvents(int id), GetId()
*- private String message;
*	- wiadomość do wysłania smsem
*	- @see setMessage(String message), getMessage()
*- private long[] numbers;
*	- numer telefonu
*	- @see setNumbers(long[] numbers) , getNumbers()
*- private String additionalArg;
* 	- dodatkowy argument. Wykorzystywany tylko w przypadku wysokiej/niskiej temperatury. Zawiera wysokość temperatury.
*	- @see setAdditnionalArgument(String additionalArg) , getAdditnionalArgument()

* Metody:	
*- public static AlertEvents getEventById(int id) 
* Metoda zwraca jeden z 5 typów wyliczeniowych w zależności od przekazanego id:
* #- HIGH_TEMPERATURE
* #- LOW_TEMPERATURE
* #- ACCESS_GRANTED
* #- ACCESS_DIED
* #- ANNIHILATION
* #- ACCESS_RULES_VIOLATION
* 	- lub w przypadku błędu zwraca id zdarzenia
* 	- @param id zdarzenia, gdzie zdarzeniem jest wysoka/niska temperatura lub dostęp zezwolony/zabroniony
*	-  Wywoływana jest ta metoda w DBConnector::setEvens()
*	- @throw RuntimeException - zwraca id zdarzenia
*- private AlertEvents(int id) 
*	- fn  AlertEvents(int id)  AlertEvents
*	- Ustawia id zdarzenia na podany w parametrze. Nie jest nigdzie wywoływany ten konstruktor.
*	- @param id zdarzenia
*- public int getId() 
*	- Zwraca id zdarzenia
*	- Również nigdzie nie jest ta metoda wywoływana
*- public void setMessage(String message) {
*	- Ustawia waidomość zdarzenia na podaną w parametrze. Metoda jest wywoływana w DBConnector::setEvens() i waidomość message = "message"
* 	- @param message wiadomość zdarzenia
*- public String getMessage()
*	- Zwraca ustawioną za pomocą setMessage(String message) wiadomość 
*	- Metoda ta jest wywoływana w konstruktorze DBConnector:DBConnector() w przypadku wyrzucenia wyjątku.
*- public void setNumbers(long[] numbers) 
*	- Ustawia numer telefonu na który będą wysyłane wiadomości
*	- @param numbers 
*	- Ustawia numer na podaną w parametrze. Metoda jest wywoływana w DBConnector::setEvens(). 
*- public long[] getNumbers() 
*	- Zwraca numer telefonu na który będą wysyłane wiadomości
*	- Metoda jest wywoływana w DBConnector::setEvens(). 
*- public void setAdditnionalArgument(String additionalArg) 
* 	- @param numbers 
*	 - Ustawia dodatkowy argument  na podany w parametrze. Metoda jest wywoływana w DBConnector::setEvens(). 
*- public String getAdditionalArgument() 
* 		- Zwraca dodatkowy argument
*	 	- Metoda jest wywoływana w MainTask::MainTask().

	
* @date 2010.05.19
* @version 1.00.00
* @see  DBConnector::setEvens(), DBConnector::DBConnector() , MainTask::MainTask()
 */
public enum AlertEvents {

	HIGH_TEMPERATURE(0),
	LOW_TEMPERATURE(1),
	ACCESS_GRANTED(2),
	ACCESS_DIED(3),
	ANNIHILATION(4),
	ACCESS_RULES_VIOLATION(5);
	
	/**
	* id zdarzenia. 
	* @see AlertEvents(int id), GetId()
	*/
	private int id;
	/**
	* wiadomość do wysłania smsem
	* @see setMessage(String message), getMessage()
	*/
	private String message;
	/**
	* wiadomość do wysłania smsem
	* @see setMessage(String message), getMessage()
	*/
	
	/**
	* numer telefonu
	* @see setNumbers(long[] numbers) , getNumbers()
	*/
	private long[] numbers;
	
	/**
	* dodatkowy argument. Wykorzystywany tylko w przypadku wysokiej/niskiej temperatury. Zawiera wysokość temperatury.
	* @see setAdditnionalArgument(String additionalArg) , getAdditnionalArgument()
	*/
	private String additionalArg;
	
	/**
	* Metoda zwraca jeden z 6 typów wyliczeniowych w zależności od przekazanego id:
	* - HIGH_TEMPERATURE
	* - LOW_TEMPERATURE
	* - ACCESS_GRANTED
	* - ACCESS_DIED
	* - ANNIHILATION
	* - ACCESS_RULES_VIOLATION
	lub w przypadku błędu zwraca id zdarzenia
	* @param id zdarzenia, gdzie zdarzeniem jest wysoka/niska temperatura lub dostęp zezwolony/zabroniony
	* Metoda wywoływana jest w DBConnector::setEvens()
	* @throw RuntimeException - zwraca id zdarzenia
	*/
	public static AlertEvents getEventById(int id) {
		switch (id) {
		case 0:
			return HIGH_TEMPERATURE;
		case 1:
			return LOW_TEMPERATURE;
		case 2:
			return ACCESS_GRANTED;
		case 3:
			return ACCESS_DIED;
		case 4:
			return ANNIHILATION;
		case 5:
			return ACCESS_RULES_VIOLATION;
		default:
			throw new RuntimeException("Unsupported event id: " + id);
		}
	}
	
	/**
	* fn  AlertEvents(int id)  AlertEvents
	*Ustawia id zdarzenia na podany w parametrze. Nie jest nigdzie wywoływany ten konstruktor.
	* @param id zdarzenia
	*/
	private AlertEvents(int id) {
		this.id = id;
	}
	
	/**
	* Zwraca id zdarzenia
	*Również nigdzie nie jest ta metoda wywoływana
	*/
	public int getId() {
		return id;
	}
	
	/**
	* Ustawia waidomość zdarzenia na podaną w parametrze. Metoda jest wywoływana w DBConnector::setEvens() i waidomość message = "message"
	* @param message wiadomość zdarzenia
	*/
	public void setMessage(String message) {
		this.message = message;
	}
	
	/**
	* Zwraca ustawioną za pomocą metody setMessage(String message) wiadomość.
	* Metoda jest wywoływana w konstruktorze DBConnector:DBConnector() w przypadku wyrzucenia wyjątku.
	*/
	public String getMessage() {
		return message;
	}
	
	/**
	* Ustawia numer telefonu na który będą wysyłane wiadomości.
	* @param numbers 
	* Ustawia numer na podaną w parametrze. Metoda jest wywoływana w DBConnector::setEvens(). 
	*/	
	public void setNumbers(long[] numbers) {
		this.numbers = numbers;
	}

	/**
	* Zwraca numer telefonu na który będą wysyłane wiadomości.
	* Metoda jest wywoływana w DBConnector::setEvens(). 
	*/		
	public long[] getNumbers() {
		return numbers;
	}
	
	/**
	* Ustawia dodatkowy argument.
	* @param numbers 
	* Ustawia dodatkowy argument  na podany w parametrze. Metoda jest wywoływana w DBConnector::setEvens(). 
	*/	
	public void setAdditnionalArgument(String additionalArg) {
		this.additionalArg = additionalArg;
	}
	
	/**
	* Zwraca dodatkowy argument.
	* Metoda jest wywoływana w MainTask::MainTask().
	*/		
	public String getAdditionalArgument() {
		return this.additionalArg;
	}
	
}
